﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;

namespace DiaryPlanner
{
    public partial class Config : UserControl
    {
        Album ab;

        public Config(Album ab)
        {
            InitializeComponent();

            this.ab = ab;

            this.labelID.Text = UserProfile.Instance().userId;
            this.labelqw.Text = showqw();
            this.labelan.Text = showan();
            this.labelGid.Text = shownGleid();

            CheckForIllegalCrossThreadCalls = false; //스레드 충돌에러 없애기
            skin_roundbox_check();
        }

        private void skin_roundbox_check() {

            string skin = UserProfile.Instance().setting;
            if(skin=="b"){
                radioButton2.Checked = true;
                setting(2);
            
            }else if(skin=="c"){
                radioButton3.Checked = true;
                setting(3);
            }
            else if (skin == "d")
            {
                radioButton4.Checked = true;
                setting(4);
            }
            else {
                radioButton1.Checked = true;
                setting(1);
            }
        
        }
        private void button1_Click(object sender, EventArgs e)//비밀번호 변경
        {
            PassWordModifier pwm = new PassWordModifier();
            pwm.ShowDialog();
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            
        }

        private void textBox2_TextChanged(object sender, EventArgs e)
        {

        }

        private void button2_Click(object sender, EventArgs e)
        {
            modqw(textBoxqw.Text.ToString());
            this.labelqw.Text = textBoxqw.Text.ToString();
            textBoxqw.Text = "";
        }

        private void button3_Click(object sender, EventArgs e)//비밀번호 찾기 질문 답
        {
            modans(textBoxan.Text.ToString());
            this.labelan.Text = textBoxan.Text.ToString();
            textBoxan.Text = "";
        }
        private string showqw()
        {
            try
            {
                string connectionString = "provider=Microsoft.JET.OLEDB.4.0;" //연결하는 객체의 공급자명(확장자명)
                                         + "data source = "  //데이터 소스=(경로입력하라는거)
                                         + Application.StartupPath ///상대경로 읽어옴
                                         + @"\diaryplannerdb.mdb";//실제 데이터베이스 파일이름

                string commandString = "Select * from [member]";//memos테이블에 있는 모든필드들을 모두 검색해라.

                OleDbDataAdapter DBAdapter ////DataSet을 채우고 데이터 소스를 업데이트하는 데 사용되는 데이터 명령 집합 및 데이터베이스 연결하게 하는 함수
                    = new OleDbDataAdapter(commandString, connectionString);//connectionString이라는 경로와 쿼리명령을 동적할당

                OleDbCommandBuilder myCommandBuilder ///연결된 데이터베이스에서 DataSet의 변경 내용을 조정하는 데 사용되는 단일 테이블 명령을 자동으로 생성합니다
                    = new OleDbCommandBuilder(DBAdapter);

                DataSet DS = new DataSet(); //DS라는 데이터 셋 동적할당

                DBAdapter.Fill(DS, "member"); //DS라는 데이터셋에 새로운 memos 테이블에 추가 또는 갱신하겠다고 알림.

                DataTable aTable = DS.Tables["member"];//memos테이블을 불러와 aTable을 새로 생성해서 저장

                DataColumn[] PrimaryKey = new DataColumn[1];

                PrimaryKey[0] = aTable.Columns["id"]; //a컬럼을 기본키를 설정

                aTable.PrimaryKey = PrimaryKey;//기본키 할당

                DataRow currRow = aTable.Rows.Find(UserProfile.Instance().userId);
                return currRow["qw"].ToString();
            }
            catch (DataException)
            {

            }
            catch (Exception)
            {

            }

            return "";
        }
        private string showan()
        {
            try
            {
                string connectionString = "provider=Microsoft.JET.OLEDB.4.0;" //연결하는 객체의 공급자명(확장자명)
                                         + "data source = "  //데이터 소스=(경로입력하라는거)
                                         + Application.StartupPath ///상대경로 읽어옴
                                         + @"\diaryplannerdb.mdb";//실제 데이터베이스 파일이름

                string commandString = "Select * from [member]";//memos테이블에 있는 모든필드들을 모두 검색해라.

                OleDbDataAdapter DBAdapter ////DataSet을 채우고 데이터 소스를 업데이트하는 데 사용되는 데이터 명령 집합 및 데이터베이스 연결하게 하는 함수
                    = new OleDbDataAdapter(commandString, connectionString);//connectionString이라는 경로와 쿼리명령을 동적할당

                OleDbCommandBuilder myCommandBuilder ///연결된 데이터베이스에서 DataSet의 변경 내용을 조정하는 데 사용되는 단일 테이블 명령을 자동으로 생성합니다
                    = new OleDbCommandBuilder(DBAdapter);

                DataSet DS = new DataSet(); //DS라는 데이터 셋 동적할당

                DBAdapter.Fill(DS, "member"); //DS라는 데이터셋에 새로운 memos 테이블에 추가 또는 갱신하겠다고 알림.

                DataTable aTable = DS.Tables["member"];//memos테이블을 불러와 aTable을 새로 생성해서 저장

                DataColumn[] PrimaryKey = new DataColumn[1];

                PrimaryKey[0] = aTable.Columns["id"]; //a컬럼을 기본키를 설정

                aTable.PrimaryKey = PrimaryKey;//기본키 할당

                DataRow currRow = aTable.Rows.Find(UserProfile.Instance().userId);
                return currRow["ans"].ToString();
            }
            catch (DataException)
            {

            }
            catch (Exception)
            {

            }

            return "";
        }
        private string shownGleid()
        {
            try
            {
                string connectionString = "provider=Microsoft.JET.OLEDB.4.0;" //연결하는 객체의 공급자명(확장자명)
                                         + "data source = "  //데이터 소스=(경로입력하라는거)
                                         + Application.StartupPath ///상대경로 읽어옴
                                         + @"\diaryplannerdb.mdb";//실제 데이터베이스 파일이름

                string commandString = "Select * from [google]";//google테이블에 있는 모든필드들을 모두 검색해라.

                OleDbDataAdapter DBAdapter ////DataSet을 채우고 데이터 소스를 업데이트하는 데 사용되는 데이터 명령 집합 및 데이터베이스 연결하게 하는 함수
                    = new OleDbDataAdapter(commandString, connectionString);//connectionString이라는 경로와 쿼리명령을 동적할당

                OleDbCommandBuilder myCommandBuilder ///연결된 데이터베이스에서 DataSet의 변경 내용을 조정하는 데 사용되는 단일 테이블 명령을 자동으로 생성합니다
                    = new OleDbCommandBuilder(DBAdapter);

                DataSet DS = new DataSet(); //DS라는 데이터 셋 동적할당

                DBAdapter.Fill(DS, "google"); //DS라는 데이터셋에 새로운 memos 테이블에 추가 또는 갱신하겠다고 알림.

                DataTable aTable = DS.Tables["google"];//memos테이블을 불러와 aTable을 새로 생성해서 저장

                DataColumn[] PrimaryKey = new DataColumn[1];

                PrimaryKey[0] = aTable.Columns["id"]; //a컬럼을 기본키를 설정

                aTable.PrimaryKey = PrimaryKey;//기본키 할당

                DataRow currRow = aTable.Rows.Find(UserProfile.Instance().userId);

                CalendarConnection.Instance().login(currRow["gid"].ToString(), currRow["pass"].ToString());

                UserProfile.Instance().connection = Boolean.Parse(currRow["con"].ToString());
                googleCheckBox.Checked = Boolean.Parse(currRow["con"].ToString());

                return currRow["gid"].ToString();
            }
            catch (DataException)
            {

            }
            catch (Exception)
            {

            }

            return "로그인되어 있지 않음";
        }
        private void setConnection()
        {
            if (!CalendarConnection.Instance().isLogin)
            {
                MessageBox.Show("로그인을 해야 사용할 수 있습니다.");
                googleCheckBox.Checked = false;
                return;
            }

            try
            {
                string connectionString = "provider=Microsoft.JET.OLEDB.4.0;" //연결하는 객체의 공급자명(확장자명)
                                         + "data source = "  //데이터 소스=(경로입력하라는거)
                                         + Application.StartupPath ///상대경로 읽어옴
                                         + @"\diaryplannerdb.mdb";//실제 데이터베이스 파일이름

                string commandString = "Select * from [google]";//google테이블에 있는 모든필드들을 모두 검색해라.

                OleDbDataAdapter DBAdapter ////DataSet을 채우고 데이터 소스를 업데이트하는 데 사용되는 데이터 명령 집합 및 데이터베이스 연결하게 하는 함수
                    = new OleDbDataAdapter(commandString, connectionString);//connectionString이라는 경로와 쿼리명령을 동적할당

                OleDbCommandBuilder myCommandBuilder ///연결된 데이터베이스에서 DataSet의 변경 내용을 조정하는 데 사용되는 단일 테이블 명령을 자동으로 생성합니다
                    = new OleDbCommandBuilder(DBAdapter);

                DataSet DS = new DataSet(); //DS라는 데이터 셋 동적할당

                DBAdapter.Fill(DS, "google"); //DS라는 데이터셋에 새로운 memos 테이블에 추가 또는 갱신하겠다고 알림.

                DataTable aTable = DS.Tables["google"];//memos테이블을 불러와 aTable을 새로 생성해서 저장

                DataColumn[] PrimaryKey = new DataColumn[1];

                PrimaryKey[0] = aTable.Columns["id"]; //a컬럼을 기본키를 설정

                aTable.PrimaryKey = PrimaryKey;//기본키 할당

                DataRow currRow = aTable.Rows.Find(UserProfile.Instance().userId);
          
                currRow.BeginEdit(); //수정을 할 부분 시작 설정

                UserProfile.Instance().connection = googleCheckBox.Checked;
                currRow["con"] = googleCheckBox.Checked;
                
                currRow.EndEdit(); //수정할 부분 끝 부분 설정;
                DataSet UpdateSet = DS.GetChanges(DataRowState.Modified); //데이터 상태를 수정한다.
                if (UpdateSet.HasErrors)
                {
                    MessageBox.Show("변경된 데이터에 문제가 있습니다.");
                }
                else
                {
                    DBAdapter.Update(DS, "google");
                    DS.AcceptChanges(); //실제 데이터를 생성
                    if (UserProfile.Instance().connection)
                    {
                        CalendarView.viewAll();
                    }
                }
            }
            catch (DataException e)
            {
                MessageBox.Show(e.ToString());
            }
            catch (Exception e)
            {
                MessageBox.Show(e.ToString());
            }
        }

        private void modqw(string qw)
        {
            try
            {
                string connectionString = "provider=Microsoft.JET.OLEDB.4.0;" //연결하는 객체의 공급자명(확장자명)
                                         + "data source = "  //데이터 소스=(경로입력하라는거)
                                         + Application.StartupPath ///상대경로 읽어옴
                                         + @"\diaryplannerdb.mdb";//실제 데이터베이스 파일이름

                string commandString = "Select * from [member]";//memos테이블에 있는 모든필드들을 모두 검색해라.

                OleDbDataAdapter DBAdapter ////DataSet을 채우고 데이터 소스를 업데이트하는 데 사용되는 데이터 명령 집합 및 데이터베이스 연결하게 하는 함수
                    = new OleDbDataAdapter(commandString, connectionString);//connectionString이라는 경로와 쿼리명령을 동적할당

                OleDbCommandBuilder myCommandBuilder ///연결된 데이터베이스에서 DataSet의 변경 내용을 조정하는 데 사용되는 단일 테이블 명령을 자동으로 생성합니다
                    = new OleDbCommandBuilder(DBAdapter);

                DataSet DS = new DataSet(); //DS라는 데이터 셋 동적할당

                DBAdapter.Fill(DS, "member"); //DS라는 데이터셋에 새로운 memos 테이블에 추가 또는 갱신하겠다고 알림.

                DataTable aTable = DS.Tables["member"];//memos테이블을 불러와 aTable을 새로 생성해서 저장

                DataColumn[] PrimaryKey = new DataColumn[1];

                PrimaryKey[0] = aTable.Columns["id"]; //a컬럼을 기본키를 설정

                aTable.PrimaryKey = PrimaryKey;//기본키 할당

                DataRow currRow = aTable.Rows.Find(UserProfile.Instance().userId);
                currRow.BeginEdit(); //수정을 할 부분 시작 설정
                currRow["qw"] = qw;
                currRow.EndEdit(); //수정할 부분 끝 부분 설정
                DataSet UpdateSet = DS.GetChanges(DataRowState.Modified); //데이터 상태를 수정한다.
                if (UpdateSet.HasErrors)
                {
                    MessageBox.Show("변경된 데이터에 문제가 있습니다.");
                }
                else
                {
                    DBAdapter.Update(DS, "member");
                    DS.AcceptChanges(); //실제 데이터를 생성
                    MessageBox.Show("비밀번호 질문이 변경되었습니다");
                    
                }
            }
            catch (DataException DE)
            {
                MessageBox.Show(DE.Message);
            }
            catch (Exception DE)
            {
                MessageBox.Show(DE.Message);
            }   
        }
        private void modans(string ans)
        {
            try
            {
                string connectionString = "provider=Microsoft.JET.OLEDB.4.0;" //연결하는 객체의 공급자명(확장자명)
                                         + "data source = "  //데이터 소스=(경로입력하라는거)
                                         + Application.StartupPath ///상대경로 읽어옴
                                         + @"\diaryplannerdb.mdb";//실제 데이터베이스 파일이름

                string commandString = "Select * from [member]";//memos테이블에 있는 모든필드들을 모두 검색해라.

                OleDbDataAdapter DBAdapter ////DataSet을 채우고 데이터 소스를 업데이트하는 데 사용되는 데이터 명령 집합 및 데이터베이스 연결하게 하는 함수
                    = new OleDbDataAdapter(commandString, connectionString);//connectionString이라는 경로와 쿼리명령을 동적할당

                OleDbCommandBuilder myCommandBuilder ///연결된 데이터베이스에서 DataSet의 변경 내용을 조정하는 데 사용되는 단일 테이블 명령을 자동으로 생성합니다
                    = new OleDbCommandBuilder(DBAdapter);

                DataSet DS = new DataSet(); //DS라는 데이터 셋 동적할당

                DBAdapter.Fill(DS, "member"); //DS라는 데이터셋에 새로운 memos 테이블에 추가 또는 갱신하겠다고 알림.

                DataTable aTable = DS.Tables["member"];//memos테이블을 불러와 aTable을 새로 생성해서 저장

                DataColumn[] PrimaryKey = new DataColumn[1];

                PrimaryKey[0] = aTable.Columns["id"]; //a컬럼을 기본키를 설정

                aTable.PrimaryKey = PrimaryKey;//기본키 할당

                DataRow currRow = aTable.Rows.Find(UserProfile.Instance().userId);
                currRow.BeginEdit(); //수정을 할 부분 시작 설정
                currRow["ans"] = ans;
                currRow.EndEdit(); //수정할 부분 끝 부분 설정
                DataSet UpdateSet = DS.GetChanges(DataRowState.Modified); //데이터 상태를 수정한다.
                if (UpdateSet.HasErrors)
                {
                    MessageBox.Show("변경된 데이터에 문제가 있습니다.");
                }
                else
                {
                    DBAdapter.Update(DS, "member");
                    DS.AcceptChanges(); //실제 데이터를 생성
                    MessageBox.Show("비밀번호 질문이 변경되었습니다");

                }
            }
            catch (DataException DE)
            {
                MessageBox.Show(DE.Message);
            }
            catch (Exception DE)
            {
                MessageBox.Show(DE.Message);
            }
        }

        public void saveGoogle()
        {
            if (CalendarConnection.Instance().login(idTextBox.Text, pwTextBox.Text))
                MessageBox.Show("로그인 되었습니다.");
            else
                return;

            try //예외처리문
            {
                string connectionString = "provider=Microsoft.JET.OLEDB.4.0;" //연결하는 객체의 공급자명(확장자명)
                                        + "data source = "  //데이터 소스=(경로입력하라는거)
                                        + Application.StartupPath ///상대경로 읽어옴
                                        + @"\diaryplannerdb.mdb";//실제 데이터베이스 파일이름

                string commandString = "Select * from [google]";//memos테이블에 있는 모든필드들을 모두 검색해라.

                OleDbDataAdapter DBAdapter ////DataSet을 채우고 데이터 소스를 업데이트하는 데 사용되는 데이터 명령 집합 및 데이터베이스 연결하게 하는 함수
                    = new OleDbDataAdapter(commandString, connectionString);//connectionString이라는 경로와 쿼리명령을 동적할당

                OleDbCommandBuilder myCommandBuilder ///연결된 데이터베이스에서 DataSet의 변경 내용을 조정하는 데 사용되는 단일 테이블 명령을 자동으로 생성합니다
                    = new OleDbCommandBuilder(DBAdapter);

                DataSet DS = new DataSet(); //DS라는 데이터 셋 동적할당

                DBAdapter.Fill(DS, "google"); //DS라는 데이터셋에 새로운 memos 테이블에 추가 또는 갱신하겠다고 알림.

                DataTable aTable = DS.Tables["google"];//memos테이블을 불러와 aTable을 새로 생성해서 저장

                DataColumn[] PrimaryKey = new DataColumn[1];

                PrimaryKey[0] = aTable.Columns["id"]; //a컬럼을 기본키를 설정

                aTable.PrimaryKey = PrimaryKey;//기본키 할당

                DataRow currRow = aTable.Rows.Find(UserProfile.Instance().userId);
                if (currRow == null)
                {
                    DataRow newRow = aTable.NewRow();

                    newRow["id"] = UserProfile.Instance().userId;
                    newRow["gid"] = idTextBox.Text;
                    newRow["pass"] = pwTextBox.Text;

                    aTable.Rows.Add(newRow);

                    DBAdapter.Update(DS, "google");
                    this.labelGid.Text = idTextBox.Text;
                    CalendarConnection.Instance().login(idTextBox.Text, pwTextBox.Text);
                }
                else
                {
                    currRow.BeginEdit(); //수정을 할 부분 시작 설정
                    currRow["gid"] = idTextBox.Text;
                    currRow["pass"] = pwTextBox.Text;
                    currRow.EndEdit(); //수정할 부분 끝 부분 설정
                    DataSet UpdateSet = DS.GetChanges(DataRowState.Modified); //데이터 상태를 수정한다.
                    if (UpdateSet.HasErrors)
                    {
                        MessageBox.Show("변경된 데이터에 문제가 있습니다.");
                    }
                    else
                    {   
                        DBAdapter.Update(DS, "google");
                        DS.AcceptChanges(); //실제 데이터를 생성
                        this.labelGid.Text = idTextBox.Text;
                    }
                }
            }
            catch (DataException DE)
            {
                MessageBox.Show(DE.Message);
            }
            catch (Exception DE)
            {
                MessageBox.Show(DE.Message);
            }
        }

        private void button4_Click(object sender, EventArgs e)
        {
            saveGoogle();
            
        }

        private void radioButton1_CheckedChanged(object sender, EventArgs e)//gray
        {
            modskin_db("a");
            UserProfile.Instance().setting = "a";
            setting(1);
        }
        public void skinSet()
        {
            string skin = UserProfile.Instance().setting;
            if (skin == "b")
            {
                this.BackColor = System.Drawing.Color.PaleTurquoise;

            }
            else if (skin == "c")
            {
                this.BackColor = System.Drawing.Color.LawnGreen;
            }
            else if (skin == "d")
            {
                this.BackColor = System.Drawing.Color.MistyRose;

            }
            else
            { //skin=="a"
                this.BackColor = System.Drawing.SystemColors.ControlLight;

            }
        }
        private void setting(int i) {
            if (i == 2) {
                this.BackColor = System.Drawing.Color.PaleTurquoise;
                
            }
            else if (i == 3) {
                this.BackColor = System.Drawing.Color.LawnGreen;
            }
            else if (i == 4)
            {
                this.BackColor = System.Drawing.Color.MistyRose;

            }
            else { //i==1
                this.BackColor = System.Drawing.SystemColors.ControlLight;
            
            }
        
        }

        private void radioButton2_CheckedChanged(object sender, EventArgs e)//blue
        {
            modskin_db("b");
            UserProfile.Instance().setting = "b";
            setting(2);

        }

        private void radioButton3_CheckedChanged(object sender, EventArgs e)//green
        {
            modskin_db("c");
            UserProfile.Instance().setting = "c";
            setting(3);
        }

        private void radioButton4_CheckedChanged(object sender, EventArgs e)//pink
        {
            modskin_db("d");
            UserProfile.Instance().setting = "d";
            setting(4);
        }

        private void modskin_db(string skin) {
            try
            {
                string connectionString = "provider=Microsoft.JET.OLEDB.4.0;" //연결하는 객체의 공급자명(확장자명)
                                         + "data source = "  //데이터 소스=(경로입력하라는거)
                                         + Application.StartupPath ///상대경로 읽어옴
                                         + @"\diaryplannerdb.mdb";//실제 데이터베이스 파일이름

                string commandString = "Select * from [member]";//memos테이블에 있는 모든필드들을 모두 검색해라.

                OleDbDataAdapter DBAdapter ////DataSet을 채우고 데이터 소스를 업데이트하는 데 사용되는 데이터 명령 집합 및 데이터베이스 연결하게 하는 함수
                    = new OleDbDataAdapter(commandString, connectionString);//connectionString이라는 경로와 쿼리명령을 동적할당

                OleDbCommandBuilder myCommandBuilder ///연결된 데이터베이스에서 DataSet의 변경 내용을 조정하는 데 사용되는 단일 테이블 명령을 자동으로 생성합니다
                    = new OleDbCommandBuilder(DBAdapter);

                DataSet DS = new DataSet(); //DS라는 데이터 셋 동적할당

                DBAdapter.Fill(DS, "member"); //DS라는 데이터셋에 새로운 memos 테이블에 추가 또는 갱신하겠다고 알림.

                DataTable aTable = DS.Tables["member"];//memos테이블을 불러와 aTable을 새로 생성해서 저장

                DataColumn[] PrimaryKey = new DataColumn[1];

                PrimaryKey[0] = aTable.Columns["id"]; //a컬럼을 기본키를 설정

                aTable.PrimaryKey = PrimaryKey;//기본키 할당

                DataRow currRow = aTable.Rows.Find(UserProfile.Instance().userId);
                currRow.BeginEdit(); //수정을 할 부분 시작 설정
                currRow["setting"] = skin;
                currRow.EndEdit(); //수정할 부분 끝 부분 설정
                DataSet UpdateSet = DS.GetChanges(DataRowState.Modified); //데이터 상태를 수정한다.
                if (UpdateSet.HasErrors)
                {
                    MessageBox.Show("변경된 데이터에 문제가 있습니다.");
                }
                else
                {
                    DBAdapter.Update(DS, "member");
                    DS.AcceptChanges(); //실제 데이터를 생성
                    //MessageBox.Show("비밀번호 질문이 변경되었습니다");

                }
            }
            catch (DataException DE)
            {
                MessageBox.Show(DE.Message);
            }
            catch (Exception DE)
            {
                MessageBox.Show(DE.Message);
            }   
        
        }

        private void googleCheckBox_Click(object sender, EventArgs e)
        {
            setConnection();
        }
       
        private void button5_Click_1(object sender, EventArgs e)
        {

            memberout mo = new memberout(ab);
            mo.ShowDialog();
        }
    }
}
